package userUtils

import (
	"5title_gin/global"
	"5title_gin/internal/model/user"
	"5title_gin/pkg/utils/jwts"
	"errors"
	"fmt"

	"github.com/gin-gonic/gin"
	"gorm.io/gorm"
)

// GetUserInfoByID 根据用户 ID 获取用户信息
func GetUserInfoByID(id uint) (*user.UserModel, error) {
	var userInfo user.UserModel
	tx := global.DB.Where("id = ?", id).First(&userInfo)
	if tx.Error != nil {
		if errors.Is(tx.Error, gorm.ErrRecordNotFound) {
			return nil, fmt.Errorf("用户不存在")
		}
		return nil, tx.Error
	}
	return &userInfo, nil
}

// GetUserInfoByToken 从请求头中提取并验证 Token，返回用户信息
func GetUserInfoByToken(c *gin.Context) (*user.UserModel, error) {
	myClaims, err := jwts.GetClaimsFromToken(c)
	if err != nil {
		return nil, fmt.Errorf("token 无效: %w", err)
	}
	userInfo, err := GetUserInfoByID(myClaims.UserID)
	if err != nil {
		return nil, fmt.Errorf("获取用户信息失败: %w", err)
	}
	return userInfo, nil
}

// UpdateUserStatus 更新用户状态但不更新时间戳
func UpdateUserStatus(userID uint, status int) error {
	// 使用UpdateColumn方法避免更新时间戳
	return global.DB.Model(&user.UserModel{}).
		Where("id = ?", userID).
		UpdateColumn("status", status).
		Error
}
